#include <iostream>
#include <cstring>
using namespace std;

const int N = 1010;

int n, V;       //要输入的货物的数量和背包容量
int v[N], w[N]; //对应货物的体积和价值
int f[N];       //状态表示数组，这里用滚动数组消去了层数限制

int main()
{
    freopen("cin.txt", "r", stdin);
    memset(f, 0, sizeof f); //初始化一下，因为第0层的必定是0
    cin >> n >> V;
    for (int i = 1; i <= n; ++i) //这里从1或者零开始没啥意义了，迭代的时候索引变换以下就行
        cin >> v[i] >> w[i];
    for (int i = 1; i <= n; ++i)        //迭代n次
        for (int j = V; j >= v[i]; --j) //因为如果j<v[i]，那就是没得比，不用迭代了
            f[j] = max(f[j], f[j - v[i]] + w[i]);
    cout << f[V];
    return 0;
}